#include <stdio.h>
#include <string.h>

void display(int n)
{
    // 0. 一定有直接返回的条件
    if(n <= 0)
        return;  

    // 1. 显示1 ~ n-1
    display(n-1);

    // 2. 显示n
    printf("%d ", n);
}

// 返回n的阶乘
int jiecheng(int n)
{
    // 0. 一定有直接返回的条件
    if(n == 1)
        return 1;

    // 1. 得到n-1的阶乘
    int k = jiecheng(n-1);

    // 2. 乘以n得到结果
    return k*n;
}

// 功能：返回f的N次方
float my_power(float f, int N)
{
    // 0. 直接返回答案的条件
    if(N == 0)
        return 1;

    // 1. 求得f的N-1次方
    float value = my_power(f, N>0 ? N-1 : N+1);

    // 2. 再乘以f，就可以得到结果
    return N>0 ? value*f : value/f;
}


int main(int argc, char const *argv[])
{
    // int n;
    // scanf("%d", &n);
    // display(n);  // 显示1、2、3、4、5…… n
    // printf("\n");

    // int m = jiecheng(n); // 阶乘 n! = (n-1)! × n； 1! = 1
    // printf("%d的阶乘等于%d\n", n, m);

    float f;
    int N;
    scanf("%f%d", &f, &N);

    float value = my_power(f, N);
    printf("%f的%d次方等于%f\n", f, N, value);

    // void revert(char s[], int len);

    // char s[] = "abcdefg";
    // revert(s, strlen(s));
    // printf("翻转之后的字符串：%s\n", s);

    return 0;
}

// 功能：将以s开头的、长度位len的字符串翻转
void revert(char s[], int len)
{
    // 0. 找到可以直接返回的条件
    if(len <= 1)
        return;

    // 1. 先把中间的len-2个字符翻转
    revert(s+1, len-2);

    // 2. 头尾交换
    char tmp;
    tmp = s[0];
    s[0] = s[len-1];
    s[len-1] = tmp;
}
